// src/utils/excelExport.js

import ExcelJS from "exceljs";

export function exportExcel(
    headers,
    data,
    filename = "export.xlsx",
    autoWidth = false
) {
    // 创建一个新的工作簿
    const workbook = new ExcelJS.Workbook();

    // 添加一个工作表
    const worksheet = workbook.addWorksheet("Sheet 1");

    // 设置表头数据
    worksheet.addRow(headers);

    // 添加数据
    data.forEach((row) => worksheet.addRow(row));

    // 设置表头样式（加粗，居中，添加边框）
    const headerRow = worksheet.getRow(1); // 获取第一行表头
    headerRow.font = { bold: true }; // 设置加粗
    headerRow.alignment = { horizontal: "center", vertical: "middle" }; // 设置表头居中
    headerRow.eachCell((cell) => {
        cell.border = {
            top: { style: "thin" },
            left: { style: "thin" },
            bottom: { style: "thin" },
            right: { style: "thin" },
        };
    });

    // 设置数据行样式（左对齐，添加边框）
    worksheet.eachRow({ includeEmpty: true }, (row, rowNumber) => {
        if (rowNumber > 1) {
            // 排除表头行
            row.eachCell((cell) => {
                cell.border = {
                    top: { style: "thin" },
                    left: { style: "thin" },
                    bottom: { style: "thin" },
                    right: { style: "thin" },
                };
                cell.alignment = { horizontal: "left" }; // 设置数据内容居左
            });
        }
    });

    // 如果启用了自动宽度设置
    if (autoWidth) {
        // 计算每列的最大宽度
        const colWidth = data.map((row) =>
            row.map((val) => {
                // 处理 null/undefined 值
                if (val == null) {
                    return { wch: 10 };
                } else if (val.toString().charCodeAt(0) > 255) {
                    // 判断是否为中文字符，中文字符宽度按字符数的2倍计算
                    return { wch: val.toString().length * 2 };
                } else {
                    // 英文字符按字符数计算
                    return { wch: val.toString().length };
                }
            })
        );

        // 使用第一行的数据作为初始宽度
        let result = colWidth[0];
        for (let i = 1; i < colWidth.length; i++) {
            for (let j = 0; j < colWidth[i].length; j++) {
                if (result[j]["wch"] < colWidth[i][j]["wch"]) {
                    result[j]["wch"] = colWidth[i][j]["wch"];
                }
            }
        }

        // 设置列宽
        worksheet.columns = result;
    }

    // 导出文件
    workbook.xlsx.writeBuffer().then((buffer) => {
        const blob = new Blob([buffer], { type: "application/octet-stream" });
        const link = document.createElement("a");
        link.href = URL.createObjectURL(blob);
        link.download = filename;
        link.click();
    });
}
